package com.oracle.serializable;

import java.io.*;

/**
 * @author zhouyanxiang
 * @create 2020-08-2020/8/17-18:29
 * 序列化之后乱码是正常的，因为序列化和反序列话是基于二进制流的，序列话便是把java对象的信息以二进制存储在文件obj.bat中，用文本编辑器打开自然是乱码。
 * 只有通过反序列话才能将存储的二进制读取出来，然后显示在控制台上。
 */
public class SerializableReview {

    static class Worker implements Serializable {
        // 自定义序列化的ID
        private static final long serializableId = 123456789L;
        // 将要被序列化的属性name
        private String  name;
        // transient修饰的变量不会被序列化
        private transient int salary;
        // 静态变量属于类信息，不属于对象的状态，因此不会被序列化
        static int age = 23;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 序列化到磁盘
        FileOutputStream fos =  new FileOutputStream("work.out");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        Worker  worker = new Worker();
        worker.setName("alex");
        oos.writeObject(worker);
        oos.flush();
        oos.close();

        // 反序列化磁盘数据并解析磁盘数据
        FileInputStream fis =  new FileInputStream("work.out");
        ObjectInputStream  ois = new ObjectInputStream(fis);
        Worker workerTest = (Worker) ois.readObject();
        System.out.println(workerTest.getName());
    }

}
